home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / taropyon / silib / inc / siev.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  11.3 KB  |  361 lines

  1. /*************************************************************************
  2. *    "siev.h"
  3. *-------------------------------------------------------------------------
  4. *    Event library
  5. *                                            Copyright (c) 1993, TaroPYON
  6. *************************************************************************/
  7.  
  8. #ifndef    _SIEVT_H
  9. #define    _SIEVT_H
  10.  
  11. #ifndef    _SITYPES_H
  12. #    include    <sitypes.h>
  13. #endif
  14. #ifndef    _SIDEFS_H
  15. #    include    <sidefs.h>
  16. #endif
  17. #ifndef    _SIIDL_H
  18. #    include    <siidl.h>
  19. #endif
  20. #ifndef    _EV_EVTYPNO_H
  21. #    include    <EV/evtypno.h>
  22. #endif
  23.  
  24. #define    EVSW_LEFT    (1)
  25. #define    EVSW_RIGHT    (2)
  26.  
  27. typedef    struct            /*  マウスイベントタイプ    */
  28. {
  29.     POINT_T            point;
  30.     int                sw;        /* スイッチ状態    */
  31. } EVQUEMOS_T;
  32.  
  33. typedef    struct
  34. {
  35.     USHORT            ec;
  36.     USHORT            ch;
  37. } EVQUEKEY_T;
  38.  
  39. typedef    struct _evQueBuf_t    /* イベントキューバッファ構造体    */
  40. {
  41.     struct _evQueBuf_t    *next;
  42.     int                    typ;    /* イベント種別        */
  43.     unsigned int        clk;    /* イベント発生時間    */
  44.     union
  45.     {
  46.         EVQUEMOS_T    mos;
  47.         EVQUEKEY_T    key;
  48.     } ev;
  49. } EVQUE_T;
  50.  
  51. #define    EVQUEBUFSIZ    (1024)
  52.  
  53. #define    EVQUE_MOS_SWON        (0x0000_0001)
  54. #define    EVQUE_MOS_SWOFF        (0x0000_0002)
  55. #define    EVQUE_MOS_MOVE        (0x0000_0010)    /* マウス移動    */
  56. #define    EVQUE_KEY_ON        (0x0001_0000)    /* キーボード    */
  57.  
  58. typedef    struct            /*  マウスイベントタイプ    */
  59. {
  60.     FRAME_T            fr;        /* 範囲            */
  61.     int                sw;        /* スイッチ状態    */
  62. } EVMOS_T;
  63.  
  64. typedef    struct
  65. {
  66.     USHORT            ec;
  67.     USHORT            ch;
  68. } EVKEY_T;
  69.  
  70. typedef struct _evdat_t
  71. {
  72.     unsigned int    att;    /* 属性                */
  73.     unsigned int    stt;    /* ステータス        */
  74.  
  75.     int                typ;    /* タイプ            */
  76.     void            *para;    /* パラメータ        */
  77.  
  78.     int                (*entFunc)( struct _evdat_t *, EVQUE_T *);
  79.     int                (*dspFunc)( struct _evdat_t *, int );
  80.     int                (*chkFunc)( struct _evdat_t * );
  81.     int                (*evFunc)(int,struct _evdat_t *);
  82.     int                evNo;    /* イベントNo            */
  83.     void            *ptr;    /* ユーザー用ポインタ    */
  84.     void            *win;    /* ウィンドゥ用ポインタ    */
  85. } EVDAT_T;
  86.  
  87. #define    EVDAT_STT_CHK    (0x0000_0001)
  88.  
  89. #define    EVCHK_ERR        (-1)    /* エラー            */
  90. #define    EVCHK_NO        ( 0)    /* なし                */
  91. #define    EVCHK_SCLC        ( 1)    /* シングルクリック    */
  92. #define    EVCHK_DCLC        ( 2)    /* ダブルクリック    */
  93. #define    EVCHK_DRAG        ( 3)    /* ドラッグ            */
  94. #define    EVCHK_MOS        ( 4)    /* その他マウス        */
  95. #define    EVCHK_KEY        ( 8)    /* キー                */
  96.  
  97. #define    EVCALL_CHKFUNC(_evdat)    \
  98.     ( (_evdat)->chkFunc ? ((_evdat)->chkFunc)(_evdat) : EVCHK_ERR )
  99.  
  100. typedef    struct _ev_t
  101. {
  102.     struct _ev_t    *next, *prev;
  103.     unsigned int    att;
  104.     int                num;
  105.     EVDAT_T            *evdat;
  106.     IDLCTRL_T        *idlCt;
  107. } EV_T;
  108.  
  109. #define    EVMOS_SWON        (0x0000_0001)    /* スイッチオン        */
  110. #define    EVMOS_SWOFF        (0x0000_0002)    /* スイッチオフ        */
  111. #define    EVMOS_MOVE        (0x0000_0010)    /* マウス移動        */
  112. #define    EVMOS_DARG        (0x0000_0020)    /* ドラッグ            */
  113. #define    EVMOS_SCLC        (0x0000_0100)    /* シングルクリック    */
  114. #define    EVMOS_DCLC        (0x0000_0200)    /* ダブルクリック    */
  115. #define    EVKEY_ON        (0x0001_0000)    /* キーボード        */
  116.  
  117. typedef    struct
  118. {
  119.     int                bufSiz;
  120.     int                bufLen;
  121.     int                bufPos;
  122.     int                readPos;
  123.     EVQUE_T            *quePtr;
  124.     EVQUE_T            *queBuf;
  125.  
  126.     int                pdSw, pdX, pdY;
  127. } SIEV_T;
  128.  
  129. extern SIEV_T       *SiEv;
  130.  
  131. /*----------------------------------------------------------------------*/
  132. #define    EV_ERROR    (-1)
  133. #define    EV_NOTHING    (-2)
  134. #define    EV_BREAK    (-3)
  135. #define    EV_NEXT        (-4)
  136. #define    EV_EXIT        (-5)
  137.  
  138. /*----------------------------------------------------------------------*/
  139. extern int            EV_init(void);
  140. extern void            EV_term(void);
  141. extern int            EV_setQueBufSiz( SIEV_T *ev, int siz );
  142. extern EV_T           *EV_workAlloc( EV_T *basEv, int evNum);
  143. extern void            EV_workFree( EV_T *ev );
  144. extern int            EV_datUnset( EV_T *ev, int evPos);
  145. extern int            EV_sense( SIEV_T *ev );
  146. /*----------------------------------------------------------------------*/
  147. #define    EVCHKATT_LOOP    (0x0001_0000)
  148. extern int            EV_chk( EV_T *evTop, unsigned int att );
  149. /*----------------------------------------------------------------------*/
  150. extern int            EV_chkQue( EV_T *evTop, EVQUE_T *que );
  151. extern EVDAT_T       *EV_chkQueEntry( EV_T *evTop, EVQUE_T *que );
  152. extern int            EV_ungetQue( EVQUE_T *evQue );
  153. extern void            EV_waitMosSwOff(void);
  154. extern int            EV_hitKbMos(void);
  155. extern void            EV_queClear(void);
  156. /*----------------------------------------------------------------------*/
  157. struct _evall_t
  158. {
  159.     int            (*entFunc)( EVDAT_T *, EVQUE_T *);
  160.     int            (*dspFunc)( EVDAT_T *, int );
  161.     int            (*chkFunc)( EVDAT_T * );
  162. };
  163. extern    int        EV_setDatAll( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evall_t *para );
  164.  
  165. #define    EV_SETALL(_ev,_evPos,_evNo,_ptr,_func,_win,_entFunc,_dspFunc,_chkFunc)    \
  166. {    struct _evall_t    _para;                                \
  167.     EVDAT_T            evdat;                                \
  168.     evdat.att    = 0;        evdat.typ    = EVTYP_ALL;    \
  169.     evdat.para   = NULL;                                \
  170.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);        \
  171.     evdat.evNo   = (_evNo);    evdat.ptr    = (_ptr);        \
  172.     evdat.win = (_win);                                    \
  173.     _para.entFunc = (int (*)(EVDAT_T *,int))(_entFunc);    \
  174.     _para.dspFunc = (int (*)(EVDAT_T *,int))(_dspFunc);    \
  175.     _para.chkFunc = (int (*)(EVDAT_T *,))   (_chkFunc);    \
  176.     EV_setDatAll((_ev),(_evPos),&evdat,&_para);            \
  177. }
  178.  
  179. /*----------------------------------------------------------------------*/
  180. struct _evfr_t
  181. {
  182.     int            sw;
  183.     FRAME_T        fr;
  184. };
  185. extern int        EV_setDatFr( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evfr_t *para );
  186.  
  187. #define    EV_SETFR(_ev,_evPos,_evNo,_ptr,_func,_win,_sw,_x1,_y1,_x2,_y2)    \
  188. {    struct _evfr_t    _para;                                \
  189.     EVDAT_T            evdat;                                \
  190.     evdat.att    = 0;        evdat.typ    = EVTYP_FR;    \
  191.     evdat.para   = NULL;                                \
  192.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);        \
  193.     evdat.evNo   = (_evNo);    evdat.ptr    = (_ptr);        \
  194.     evdat.win = (_win);                                    \
  195.     _para.sw    = (_sw);    _para.fr.x1 = (_x1);        \
  196.     _para.fr.y1 = (_y1);    _para.fr.x2 = (_x2);        \
  197.     _para.fr.y2 = (_y2);                                \
  198.     EV_setDatFr((_ev),(_evPos),&evdat,&_para);            \
  199. }
  200.  
  201. /*----------------------------------------------------------------------*/
  202. struct _evbtn1_t
  203. {
  204.     int            sw;
  205.     FRAME_T        fr;
  206.     int            n;
  207.     COLOR_T        chil, csha;
  208. };
  209. extern int        EV_setDatBtn1( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evbtn1_t *para );
  210.  
  211. #define    EV_SETBTN1(_ev,_evPos,_evNo,_ptr,_func,_win,_sw,\
  212.     _x1,_y1,_x2,_y2,_n,_c1,_c2)                                    \
  213. {    struct _evbtn1_t    _para;                                    \
  214.     EVDAT_T                evdat;                                    \
  215.     evdat.att    = 0;            evdat.typ    = EVTYP_BTN1;        \
  216.     evdat.para   = NULL;                                        \
  217.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);                \
  218.     evdat.evNo   = (_evNo);        evdat.ptr    = (_ptr);            \
  219.     evdat.win    = (_win);                                        \
  220.     _para.sw    = (_sw);                                        \
  221.     _para.fr.x1 = (_x1);        _para.fr.y1 = (_y1);            \
  222.     _para.fr.x2 = (_x2);        _para.fr.y2 = (_y2);            \
  223.     _para.n     = (_n);                                            \
  224.     _para.chil  = (_c1);        _para.csha  = (_c2);            \
  225.     EV_setDatBtn1((_ev),(_evPos),&evdat,&_para);                \
  226. }
  227.  
  228. /*----------------------------------------------------------------------*/
  229. struct _evbtn2_t
  230. {
  231.     int            md;
  232.     POINT_T        point;
  233.     int            sw;
  234.     FRAME_T        fr;
  235.     int            n;
  236.     COLOR_T        cbtn, chil, csha;
  237. };
  238. extern int        EV_setDatBtn2( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evbtn2_t *para );
  239.  
  240. #define    EV_SETBTN2(_ev,_evPos,_evNo,_ptr,_func,    \
  241.     _win,_sw,_x1,_y1,_x2,_y2,_n,_c1,_c2,_c3)    \
  242. {    struct _evbtn2_t    _para;                                    \
  243.     EVDAT_T                evdat;                                    \
  244.     evdat.att    = 0;            evdat.typ    = EVTYP_BTN2;        \
  245.     evdat.para   = NULL;                                        \
  246.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);                \
  247.     evdat.evNo   = (_evNo);        evdat.ptr    = (_ptr);            \
  248.     evdat.win    = (_win);                                        \
  249.     _para.md    =  0;            _para.sw    = (_sw);            \
  250.     _para.fr.x1 = (_x1);        _para.fr.y1 = (_y1);            \
  251.     _para.fr.x2 = (_x2);        _para.fr.y2 = (_y2);            \
  252.     _para.n     = (_n);            _para.cbtn  = (_c1);            \
  253.     _para.chil  = (_c2);        _para.csha  = (_c3);            \
  254.     EV_setDatBtn2((_ev),(_evPos),&evdat,&_para);                \
  255. }
  256.  
  257.  
  258. /*----------------------------------------------------------------------*/
  259. struct _evboxf_t
  260. {
  261.     int            md;
  262.     POINT_T        point;
  263.     int            sw;
  264.     FRAME_T        fr;
  265.     COLOR_T        col;    /* ベタ塗色            */
  266.     void       *blk;    /* イメージ保存用    */
  267. };
  268. extern int        EV_setDatBoxf( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evboxf_t *para );
  269.  
  270. #define    EV_SETBOXF(_ev,_evPos,_evNo,_ptr,_func,    \
  271.     _win,_sw,_x1,_y1,_x2,_y2,_col)                \
  272. {    struct _evboxf_t    _para;                                    \
  273.     EVDAT_T                evdat;                                    \
  274.     evdat.att    = 0;            evdat.typ    = EVTYP_BOXF;        \
  275.     evdat.para   = NULL;                                        \
  276.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);                \
  277.     evdat.evNo   = (_evNo);        evdat.ptr    = (_ptr);            \
  278.     evdat.win    = (_win);                                        \
  279.     _para.md    =  0;            _para.sw    = (_sw);            \
  280.     _para.fr.x1 = (_x1);        _para.fr.y1 = (_y1);            \
  281.     _para.fr.x2 = (_x2);        _para.fr.y2 = (_y2);            \
  282.     _para.col   = (_col);                                        \
  283.     EV_setDatBoxf((_ev),(_evPos),&evdat,&_para);                \
  284. }
  285.  
  286. /*----------------------------------------------------------------------*/
  287. struct _evswoly_t
  288. {
  289.     unsigned int    att;
  290.     int                sw;
  291. };
  292. extern int        EV_setDatSwoly( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evswoly_t *para );
  293. extern int        EV_chkSwOff(void);
  294.  
  295. #define    EV_SETSWOLY(_ev,_evPos,_evNo,_ptr,_func,_win,_att,_sw)    \
  296. {    struct _evswoly_t    _para;                                    \
  297.     EVDAT_T                evdat;                                    \
  298.     evdat.att    = 0;            evdat.typ    = EVTYP_SWOLY;        \
  299.     evdat.para   = NULL;                                        \
  300.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);                \
  301.     evdat.evNo   = (_evNo);        evdat.ptr    = (_ptr);            \
  302.     evdat.win    = (_win);                                        \
  303.     _para.att    = (_att);        _para.sw     = (_sw);            \
  304.     EV_setDatSwoly((_ev),(_evPos),&evdat,&_para);                \
  305. }
  306.  
  307. #define    EVSWOLY_ATT_WIN        (0x80)    /* ウィンドゥの重なりをチェックする */
  308. #define    EVSWOLY_ATT_QUICK    (0x01)    /* ボタンが押されたからすぐに反応    */
  309.  
  310. /*----------------------------------------------------------------------*/
  311. struct _evkeyon_t
  312. {
  313.     UINT    ch, ec;
  314. };
  315. extern int        EV_setDatKeyon0( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evkeyon_t *para );
  316.  
  317. #define    EV_SETKON0(_ev,_evPos,_evNo,_ptr,_func,_win)            \
  318. {    struct _evkeyon_t    _para;                                    \
  319.     EVDAT_T                evdat;                                    \
  320.     evdat.att    = 0;            evdat.typ    = EVTYP_KON0;        \
  321.     evdat.para   = NULL;                                        \
  322.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);                \
  323.     evdat.evNo   = (_evNo);        evdat.ptr    = (_ptr);            \
  324.     evdat.win    = (_win);                                        \
  325.     _para.ch     = 0xFFFF;        _para.ec     = 0;                \
  326.     EV_setDatKeyon0((_ev),(_evPos),&evdat,&_para);                \
  327. }
  328.  
  329. /*----------------------------------------------------------------------*/
  330. extern int        EV_setDatKeyon1( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evkeyon_t *para );
  331.  
  332. #define    EV_SETKON1(_ev,_evPos,_evNo,_ptr,_func,_win,_ch,_ec)    \
  333. {    struct _evkeyon_t    _para;                                    \
  334.     EVDAT_T                evdat;                                    \
  335.     evdat.att    = 0;            evdat.typ    = EVTYP_KON1;        \
  336.     evdat.para   = NULL;                                        \
  337.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);                \
  338.     evdat.evNo   = (_evNo);        evdat.ptr    = (_ptr);            \
  339.     evdat.win    = (_win);                                        \
  340.     _para.ch     = (_ch);        _para.ec     = (_ec);            \
  341.     EV_setDatKeyon1((_ev),(_evPos),&evdat,&_para);                \
  342. }
  343.  
  344. /*----------------------------------------------------------------------*/
  345. extern int        EV_setDatKeyon2( EV_T *ev, int evPos, EVDAT_T *evdat, struct _evkeyon_t *para );
  346.  
  347. #define    EV_SETKON2(_ev,_evPos,_evNo,_ptr,_func,_win,_ch,_ec)    \
  348. {    struct _evkeyon_t    _para;                                    \
  349.     EVDAT_T                evdat;                                    \
  350.     evdat.att    = 0;            evdat.typ    = EVTYP_KON2;        \
  351.     evdat.para   = NULL;                                        \
  352.     evdat.evFunc = (int (*)(int,EVDAT_T *))(_func);                \
  353.     evdat.evNo   = (_evNo);        evdat.ptr    = (_ptr);            \
  354.     evdat.win    = (_win);                                        \
  355.     _para.ch     = (_ch);        _para.ec     = (_ec);            \
  356.     EV_setDatKeyon2((_ev),(_evPos),&evdat,&_para);                \
  357. }
  358. /*----------------------------------------------------------------------*/
  359.  
  360. #endif
  361.